AWS Lambda の料金と SnapStart の料金の計算方法を整理してみた

AWS Lambda の料金と SnapStart の料金の計算方法を整理してみた

忘れた頃にこの記事を見返します。
Clock Icon2025.01.09

AWS Lambda SnapStartがPythonと.NETでも利用可能になりました。

仕事ではPythonを使っているので「来たか!」となったのですが、「料金ってどのぐらいになるんだろう?」と気になりました。
というわけで試算をするために、まずは、計算方法を整理してみました。

おすすめの方

  • AWS Lambdaの料金を知りたい方
  • AWS Lambda SnapStartの料金を知りたい方

本記事における試算の前提

  • 1ヶ月=31日の料金を試算します
  • アーキテクチャは、x86とします
  • 最初の60億GB秒/月の金額を利用します
  • 東京リージョンとします
  • SnapStart以外の機能は利用しません
  • SnapStartで利用するLambdaのバージョンは1つのみ
  • SnapStartが動くリクエストの割合(コールドスタートの割合)は、1%とします
  • 無料利用枠は、無しとします
  • 2024年12月時点の料金です
  • SnapStartによるソフトウェア更新の自動適用の課金(コンピューティング料金)は無視します

Lambda は、回復性のためにスナップショットのキャッシュされたコピーを維持し、ランタイムアップグレードやセキュリティパッチなどのソフトウェア更新を自動的に適用します。Lambda がソフトウェア更新を適用するために初期化コードを再実行すると、そのたびに料金が発生します。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/snapstart.html#snapstart-pricing

結論(計算式のみ)

上記前提のうえで、次の計算式です。

項目 計算式
リクエスト料金 Lambda実行回数 / 100万 * 0.2 USD
コンピューティング料金 1ヶ月の実行回数 * 1回あたりの実行時間 * メモリ割り当て / 1024 * 0.0000166667 USD
SnapStart(キャッシュの料金) 3600 * 24 * 31 * メモリ割り当て / 1024 * 0.0000015046 USD
SnapStart(リストアの料金) 1ヶ月の実行回数 * SnapStartが動くリクエストの割合 * メモリ割り当て / 1024 * 0.0001397998 USD

「SnapStartが動くリクエストの割合」は、つまり、「コールドスタートの割合」です。
具体的なLambdaが存在する場合は、次の方法で調査できます。

以下、具体的な計算方法です。

Lambdaの料金の計算方法

Lambdaの基本料金は、主に2つの要素で決まります。

  • リクエスト料金
  • コンピューティング料金

上記に加えて、他の機能を利用した場合に追加料金が発生します。

  • エフェメラルストレージの料金
  • Provisioned Concurrencyの料金
  • SnapStartの料金
  • Lambda HTTP応答ストリームの料金
  • データ転送およびその他の料金

リクエスト料金の計算について

リクエスト料金は単純ですね。次の計算式です。

Lambda実行回数 / 100万 * 0.2 USD

1ヶ月におけるLambda実行回数が「7,440,000」のとき、リクエスト料金は「約 1.49 USD」です。

7,440,000 / 1,000,000 * 0.2 = 1.488

コンピューティング料金の計算について

コンピューティング料金は、すこし複雑です。「1GB-s あたり 0.0000166667 USD」です。
「1GB-s」は、「メモリ割り当てが1GBのLambdaを1秒実行した際の料金」です。

01_lambda_price

つまり、計算には「Lambdaの実行時間(メモリ割り当てを考慮する)」が必要です。
ちなみに、Lambdaの実行時間は、コンピューティング時間と呼ばれています。
コンピューティング時間に対する課金は1ミリ秒ごとに発生します。

コンピューティング時間を計算する

コンピューティング時間は、メモリ割り当てを考慮するか否かの2種類があります。

  • コンピューティング時間 [s](メモリ割り当てを考慮していない)
  • コンピューティング時間 [GB-s](メモリ割り当てを考慮する)

分かりやすいように、まずは「コンピューティング時間(メモリ割り当てを考慮していない)」を計算します。

コンピューティング時間(メモリ割り当てを考慮していない)を計算する

今回は、次の条件とします。

項目
1ヶ月の実行回数 7,440,000
1回あたりの実行時間 [s] 2

次の計算式です。

1ヶ月の実行回数 * 1回あたりの実行時間

つまり、1ヶ月のコンピューティング時間(メモリ割り当てを考慮していない)は、「14,880,000 [s]」です。

7,440,000 * 2 = 14,880,000

コンピューティング時間(メモリ割り当てを考慮する)

続いて、コンピューティング時間(メモリ割り当てを考慮する)を計算します。
今回は、次の条件とします。

項目
メモリ割り当て [MB] 1024

次の計算式です。

コンピューティング時間(メモリ割り当てを考慮していない) * メモリ割り当て / 1024

つまり、1ヶ月のコンピューティング時間(メモリ割り当てを考慮する)は、「14,880,000 [GB-s]」です。

14,880,000 * 1024 / 1024 = 14,880,000

コンピューティング料金を計算する

最後に、「コンピューティング時間(メモリ割り当てを考慮する)」に対して、「1GB-sあたりの料金」を掛け算します。
次の計算式です。

1ヶ月のコンピューティング時間(メモリ割り当てを考慮する) * 1GB-sあたりの料金 USD

1ヶ月のコンピューティング時間(メモリ割り当てを考慮する)が「14,880,000 [GB-s]」のとき、コンピューティング料金は「約 248 USD」です。

14,880,000 * 0.0000166667 = 248.000496

SnapStartの料金について

SnapStartは、2つの料金があります。

  • キャッシュの料金
  • リストアの料金

02_lambda_price

SnapStartのキャッシュの料金について

メモリを1GB割り当てたLambdaのスナップショットを1秒維持するために $0.0000015046 の課金が発生します。

https://dev.classmethod.jp/articles/snap-start-support-python-and-dotnet/

つまり、「SnapStart キャッシュの合計使用量」に対して、「0.0000015046 USD」を掛け算します。

SnapStart キャッシュの合計使用量

今回は、次の条件とします。

項目
メモリ割り当て [MB] 1024
SnapStartが有効になっているLambda関数バージョンがアクティブな時間 1ヶ月

次の計算式です。

SnapStartが有効になっているLambda関数バージョンがアクティブな時間 * メモリ割り当て / 1024

SnapStart キャッシュの合計使用量は、「2,678,400 GB-s」です。

3600s * 24h * 31days * 1024 / 1024 = 2,678,400

SnapStartのキャッシュの料金を計算する

次の計算式です。

SnapStart キャッシュの合計使用量 * 0.0000015046 USD

SnapStart キャッシュの合計使用量が「2,678,400 GB-s」のとき、SnapStartのキャッシュの料金は「約 4.03 USD」です。

2,678,400 * 0.0000015046 = 4.02992064

SnapStartのリストアの料金について

メモリを1GB割り当てたLambdaのスナップショットを1回リストアするごとに $0.0001397998 の課金が発生します。

https://dev.classmethod.jp/articles/snap-start-support-python-and-dotnet/

つまり、「SnapStart リストアの総使用量」に対して、「0.0001397998 USD」を掛け算します。

「SnapStart リストアの総使用量」は、「SnapStart リストアを使用するリクエスト数」から計算できます。

SnapStart リストアを使用するリクエスト数

つまり、今までコールドスタートしていた回数です。
今回は、次の条件とします。

項目
1ヶ月の実行回数 7,440,000
コールドスタートの割合 1%

次の計算式です。

1ヶ月の実行回数 * コールドスタートの割合

SnapStart リストアを使用するリクエスト数は、「74,400」です。

7,440,000 * 1 / 100

SnapStart リストアの総使用量

今回は、次の条件とします。

項目
メモリ割り当て [MB] 1024

次の計算式です。

SnapStart リストアを使用するリクエスト数 * メモリ割り当て / 1024

SnapStart リストアを使用するリクエスト数が「74,400」のとき、SnapStart リストアの総使用量は「74,400 GB」です。

74,400 * 1024 / 1024 = 74,400 GB

SnapStartのリストアの料金を計算する

次の計算式です。

SnapStart リストアの総使用量 * 0.0001397998 USD

SnapStart リストアの総使用量が「74,400 GB」のとき、SnapStartのリストアの料金は「約 10.4 USD」です。

74,400 GB * 0.0001397998 = 10.40110512 USD

合計月額料金

下記の合計です。

項目 料金 [USD]
リクエスト料金 1.49
コンピューティング料金 248
SnapStart(キャッシュの料金) 4.03
SnapStart(リストアの料金) 10.4
合計 263.92

さいごに

AWS Lambda の料金と SnapStart の料金の計算方法を整理してみました。
本記事の前提にした数値は、AWS公式の料金例と同じです。

03_lambda_price

2つの内容を見比べると、理解が進むかもしれません。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.